package main

import (
	"fmt"
	"reflect"
)

// 通过反射获取数据类型
func testRef(i interface{}) {
	refType := reflect.TypeOf(i)
	fmt.Println("refType:", refType) // 这反射的是reflect.Type

	refValue := reflect.ValueOf(i)
	fmt.Println("refValue:", refValue)
	fmt.Printf("数据类型= %T  \n", refValue) // reflect.Value

	refVal := refValue.Int()
	fmt.Println("通过反射获取的真正的值：", refVal)
}

// 修改基本类型的值
func setValByRef(i interface{}) {
	refValue := reflect.ValueOf(i)
	refValue.Elem().SetInt(20)
}

func main() {
	num := 10
	fmt.Println("before num:", num)
	setValByRef(&num)
	fmt.Println("after num:", num)
}
